import base64
import urllib.parse


def decode_url(encoded_url):
    """
    url 解码
    :param encoded_url:
    :return:
    """
    # base64 解码
    base64_decoded = base64.b64decode(encoded_url).decode('utf-8')
    # unescape 解码（也就是 URL 解码）
    final_url = urllib.parse.unquote(base64_decoded)
    return final_url


def generate_sign(raw_sign):
    """
    sign 生成
    :param raw_sign:
    :return:
    """
    # 第一步：URL decode（模拟 js 中的解码）
    decoded = urllib.parse.unquote(raw_sign)

    # 第二步：URL encode（模拟 encodeURIComponent）
    encoded = urllib.parse.quote(decoded, safe='')

    return encoded

if __name__ == '__main__':
    """
    爬取解密思路
    (1)sign加密串5分钟获取一次，请求地址: https://gv.duboku.io/static/player/vidjs25.php
    保障最终生成的sign有效即可
    (2)播放视频页面地址  例如: https://gv.duboku.io/vodplay/5556-1-3.html
    获取到 var player_data ={}，获取到到加密的url
    (3)url解码 +生成的sign 即可生成有效链接
    
    注意sign会失效，所以，每隔5分钟，再次通过(1)生成新的sign，保障链接有效即可，写入数据库提供接口给web使用
    需要定时器去更新sign
     
    """
    # todo 这里只给出解析示例，等爬虫框架学完，在部署即可


    # 示例
    encoded = "JTY4JTc0JTc0JTcwJTczJTNBJTJGJTJGJTc0JTMyJTMwJTZEJTJFJTZFJTYyJTZGJTZCJTc1JTJFJTYzJTZGJTZEJTJGJTMyJTMwJTMyJTM1JTMwJTM2JTMxJTM2JTJGJTQyJTMyJTU1JTRCJTc5JTcwJTZCJTc5JTJGJTY5JTZFJTY0JTY1JTc4JTJFJTZEJTMzJTc1JTM4"
    real_url = decode_url(encoded)
    print("解密后的视频地址：", real_url)
    sign = generate_sign('eXNTvYPq5PR46iUTE%2F%2FeUyGyi59AtFgu4fmHNytT5FA%3D')
    print("生成sign",sign)
    print("拼接最终可播放地址: ",real_url+'?sign='+sign)
